Художественные модели 3D для обучения рисованию

Дмитрий Маштаков
  Вот тут есть клип "про черепушку", в котором показывается, как она поворачивается - https://youtu.be/8g0TAn7isOc

  Модели по которым учатся рисовать человеческое тело, широко используются на практике. Хорошие рекомендации по рисованию имеются в иллюстрированной книге «Изображение человека. Основы рисунка с натуры» -
автор Баммес Готтфрид.  Скачать эту книгу в формате pdf можно тут - http://disk.yandex.ru/i/25wI1X5Di5njGw

  У меня уже была собственная программа «Стереометрические модели», делающая и показывающая стереометрические построения, и помогающая школьникам в их подготовке к ЕГЭ. Она демонстрирует геометрическую модель, состоящую из точек и прямых линий, в разных её положениях и с использованием эффекта воздушной перспективы – https://youtu.be/je9SSSN0Wks Результат нагляден и очень эффектен.

  Поэтому у меня и появилась мысль – а можно ли эту программу приспособить для рисования и демонстрации объёмных художественных моделей? С одной стороны, почему бы и нет, но на практике оказалось, что в программу нужно внести некоторые добавления, правда, небольшие. О них я хочу вам рассказать.

    ИЗМЕНЕНИЯ В ПРОГРАММЕ

  Прежде чем что-то менять, я решил попробовать сделать художественную модель уже имеющимися средствами. Я взял рисунок, изображающий череп в профиль, и обвёл контуры черепа отрезками прямых линий.
  В моей программе это делается так же просто, как это делается в программе «CorelDraw» - https://youtu.be/GU2zITgWy-A
  Но вот незадача – я получил изображение только в одной единственной секущей череп плоскости. А как мне получить точки, находящиеся справа и слева то неё? Получать новые точки, достраивая чертёж так, как я делал это в программе «Стереометрические модели», это процедура непростая, а новых точек нужно сделать много.

  И тогда я решил – создаём новый отрезок или новую точку наобум, располагая их в произвольном месте. А потом, используя клавиши со стрелочками на клавиатуре компьютера, передвигаем созданный элемент на нужное место.
  Клавиши со стрелочками предназначались у меня для другого – ими я передвигал буквенное обозначение элемента, но для художественной модели буквенные обозначения не очень нужны, поэтому я ввёл «режим сдвига», в котором сдвигаются не буквенные обозначения элементов, а сдвигаются сами элементы. Они передвигаются по осям X и Z, а если кнопки для сдвига по вертикали нажимать одновременно с  клавишей «Shift», то элемент сдвигается по Y.

  Попробовал, получилось удобно. К пунктам меню добавил ещё одну опцию – отражение элемента в плоскости. И действительно, создавая левую часть черепа, зачем мне делать то же самое с правой его стороной?
  Выбираю элемент «плоскость» (на иллюстрации этот элемент показан красной точкой P с торчащей влево нормалью), извлекаю тот элемент, который я буду отражать (при извлечении делается копия элемента), выбираю копию и отражаю её, кликнув по кнопке «ok».

  Попробовал, получилось удобно. Таким способом я и нарисовал тот череп, который вы видите на иллюстрации. Его можно вращать и рассматривать в разных ракурсах. Но и это ещё не всё.

     СВЯЗАННАЯ С ТОЧКОЙ СФЕРА. ГЛАЗ ЧЕЛОВЕКА

  Чтобы облегчить себе дальнейшую работу (а планировалось создать модель глаза), я придал одной кнопке, которая никак в художественной модели не использовалась, дополнительную опцию под названием «сферы».
  В этой опции к точке присоединяется не окружность, находящаяся во фронтальной плоскости, как это делалось при использовании присоединённой графики, а сфера заданного диаметра, перемещающаяся вместе с точкой.

  Более того, в меню я ввёл дополнительную опцию, позволяющую наложить выбранной элемент на поверхность этой сферы. Рисование прилегающего к глазному яблоку века теперь оказывается очень простым – обрисовываем веко линиями во фронтальной плоскости, помещаем позади этого рисунка сферу, и накладываем контур века на сферу.
  Теперь, при поворотах модели, контур от поверхности сферы не уходит, он как бы прилип к этой сфере.
  Дублируем элементы, изображающие веко. Разворачиваем модель в профиль и закрепляем её в этом ракурсе, сдвигаем копию века по оси Y в сторону носа. И вот мы уже почти получили изображение века в объёме. Разворачиваем модель анфас, и вновь корректируем положение века, теперь используя передвижения по X и Z.
  Сделав верхняя часть верхнего века и нижнюю часть нижнего, мы получим вполне реалистичную модель нашего глаза.

  Провозившись с этим, и добавив линию носа с одной сторона, и лоб со щекой - с другой, я всё же был не полностью удовлетворён. Дело в том, что движение с помощью кнопок по координате Y приводило к видимому смещению точек, как по горизонтали, так и по вертикали, и это портило их первоначальную установку. Модель приходилось постоянно поворачивать то так, то этак, чтобы убедиться в том, что точка находится на своём правильном месте.
  Гораздо проще было бы двигать точки, наблюдая за ними в двух взаимно перпендикулярных проекциях – ZX и ZY.
 
     РЕЖИМ ДВУХ ПРОЕКЦИЙ

  Я поинтересовался, а имеются ли такие проблемы в существующих программах, работающих с 3D моделями?
  Да, в них тоже, чтобы следить за результатом, нужно постоянно поворачивать модель. Вот тут создание модели ведётся сначала выделением и передвижением выделенных участков, а затем передвижением отдельных узлов возникшей сетки -
https://youtu.be/3P9fzn31cIg  - программа «Blender 2.81» 
 
  Или путём массового передвижения точек с помощью кисти, и затем передвижением узлов сетки с постоянным подглядыванием на повёрнутую модель – а что же там получилось на самом деле?
      https://youtu.be/XRpJ-4ypMl8  - программа «3Ds Max»

  Получается, хоть и наглядно, но не совсем удобно. Для передвижения графических элементов гораздо проще использовать классическое отображение модели в двух проекциях.
  Оказалось, что и делать-то мне для этого почти ничего не надо. В текст программы, который создаёт изображение в изометрии, нужно было только ввести два условных оператора, и пожалуйста, вместо изометрического чертежа, показанного на иллюстрации слева возникает проекция в координатах ZX, и правее, с некоторым отступом от неё, проекция в координатах ZY.
  На иллюстрации показано, как я, подцепив указателем точку, взятую на одной из проекций, переношу её на другое место.
  В общем, сделанное очень порадовало меня. Небольшая кнопочка, примыкающая к кнопке «сферы», включает и отключает режим двух проекций, и мы можем спокойно работать с моделью в том виде, в каком захотим.

Спасибо за внимание!
____________________

  Ниже приводится фрагмент текста программы, который выводит на рисунок изображение точки. Fa – это флаг режима двух проекций (0 или 1), на этот флаг реагируют условные операторы, отмеченные в тексте звёздочками.
  dFa это отступ – расстояние между проекциями, это расстояние может регулироваться. Буквенное обозначение (если оно есть) делается обращением Call BSim(Pvv(N, 9)) и оно появляется на двух проекциях сразу.


    Case 1: 'точка
      X1 = Pvv(N, 1) / 10: Y1 = Pvv(N, 2) / 10: Z1 = Pvv(N, 3) / 10
      If L6F = 1 Then 'воздушная перспектива
        Co = Cbel(C128, Y1 + Y1): C = Cbel(C, Y1 + Y1)
        C = Ckomb(C, NN): Co = Ckomb(Co, NN):
      End If
      X1 = X1 + Y1 * KYo * CCo: Y1 = -Z1 - Y1 * KYo * SSo:
      X1 = XXo + X1: Y1 = YYo + Y1:
      If Fa = 0 Then X1 = XXo + X1a: Y1 = YYo - Z1: ‘******
      If Fxy > 0 Then XF1 = X1: YF1 = Y1: GoTo 5: 'точка в плане -наружу
6      Form1.Picture1.DrawWidth = DWo + 8:
     Form1.Picture1.PSet (X1, Y1), 0: Form1.Picture1.DrawWidth = DWo + 5:
     Form1.Picture1.PSet (X1, Y1), E(C): Call BSim(Pvv(N, 9)) 'буквенное обозначение
      NL = Pvv(N, 8):
      If NL > 0 Then
        Form1.Picture1.DrawWidth = DW:
        If FC40 = 1 Then
        Form1.Picture1.Circle (X1, Y1), Pvv(N, 4) / 2, E(C)
        Else: Call MLpic(N, X1, Y1, C And C240)
      End If: End If:
      If Fa = 0 Then Fa = 1: X1 = XXo + Y1a + dFa: GoTo 6: ‘******